function displayCartItems() {
    const userId = globalUserId;
    fetch(`/DAO/user_cart_DAO.php?action=getUserCartByUserIdJson&userId=${userId}`)
        .then(response => response.json())
        .then(data => {
            const cartItemsContainer = document.getElementById('cartItems');
            cartItemsContainer.innerHTML = '';
            let totalAmount = 0;
            if (data.length === 0) {
                cartItemsContainer.innerHTML = '<p>Ваша корзина пуста</p>';
            } else {
                data.forEach(item => {
                    fetch(`/DAO/product_DAO.php?action=getProductById&id=${item.product_id}`)
                        .then(response => response.json())
                        .then(product => {
                            const productDiv = document.createElement('div');
                            productDiv.className = 'cart-item';
                            productDiv.id = `cart-item-${item.id}`;
                            productDiv.setAttribute('data-product-id', item.product_id);
                            productDiv.innerHTML = `
                                <div class="product-info">
                                    <img src="${product.image_url}" alt="${product.name}" class="product-image">
                                    <div class="product-details">
                                        <h3>${product.name}</h3>
                                        <p>${product.description}</p>
                                        <p id="price_${item.id}">Цена: ${product.price} ₽</p>
                                    </div>
                                </div>
                                <div class="quantity-control">
                                    <i class="fas fa-minus-circle" onclick="decreaseQuantity(${item.id})"></i>
                                    <span id="quantity_${item.id}" class="quantity">${item.quantity}</span>
                                    <i class="fas fa-plus-circle" onclick="increaseQuantity(${item.id}, ${product.id})"></i>
                                </div>
                                <div class="total-price">
                                    <p id="total_price_${item.id}">Всего: ${item.quantity * product.price} ₽</p>
                                </div>
                                <i class="fas fa-trash-alt remove-item" onclick="removeFromCart(${item.id})"></i>
                            `;
                            cartItemsContainer.appendChild(productDiv);
                            totalAmount += item.quantity * product.price;
                            updateTotalAmountDisplay(totalAmount);
                        })
                        .catch(error => console.error('Ошибка при загрузке данных о продукте:', error));
                });
            }
        })
        .catch(error => console.error('Ошибка при загрузке данных корзин:', error));
}

function calculateAndDisplayTotal() {
    const cartItems = document.querySelectorAll('.cart-item');
    let totalAmount = 0;
    cartItems.forEach(item => {
        const quantity = parseInt(document.getElementById(`quantity_${item.id.substring(10)}`).textContent);
        const priceText = document.getElementById(`price_${item.id.substring(10)}`).textContent;
        const price = parseFloat(priceText.replace('Цена: ', '').replace(' ₽', '').trim());
        totalAmount += quantity * price;
    });
    updateTotalAmountDisplay(totalAmount);
}

function updateTotalAmountDisplay(totalAmount) {
    const totalAmountElement = document.getElementById('totalAmount');
    totalAmountElement.textContent = `Общая сумма: ${totalAmount.toFixed(2)} ₽`;
}

function increaseQuantity(cartId, productId) {
    fetch(`/DAO/product_DAO.php?action=getProductById&id=${productId}`)
        .then(response => response.json())
        .then(product => {
            const currentQuantity = parseInt(document.getElementById(`quantity_${cartId}`).textContent);
            if (currentQuantity < product.quantity) {
                updateCartQuantity(cartId, currentQuantity + 1);
            } else {
                alert('Невозможно добавить больше единиц этого товара, нет в наличии достаточного количества.');
            }
        })
        .catch(error => console.error('Ошибка при получении данных о продукте:', error));
}

function decreaseQuantity(cartId) {
    const currentQuantity = parseInt(document.getElementById(`quantity_${cartId}`).textContent);
    if (currentQuantity > 1) {
        updateCartQuantity(cartId, currentQuantity - 1);
    } else {
        alert('Количество не может быть меньше 1.');
    }
}

function updateCartQuantity(cartId, newQuantity) {
    const url = `/DAO/user_cart_DAO.php?action=updateUserCartQuantity&id=${cartId}&quantity=${newQuantity}`;
    fetch(url)
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                document.getElementById(`quantity_${cartId}`).textContent = newQuantity;
                updateTotalPrice(cartId, newQuantity);
                calculateAndDisplayTotal();
            } else {
                alert('Ошибка при обновлении количества в корзине: ' + data.message);
            }
        })
        .catch(error => console.error('Ошибка при обновлении корзины:', error));
}

function updateTotalPrice(cartId, newQuantity) {
    const priceText = document.getElementById(`price_${cartId}`).textContent;
    const price = parseFloat(priceText.replace('Цена: ', '').replace(' ₽', '').trim());
    const totalPrice = newQuantity * price;
    const totalPriceElement = document.getElementById(`total_price_${cartId}`);
    totalPriceElement.textContent = `Всего: ${totalPrice.toFixed(2)} ₽`;
    calculateAndDisplayTotal();
}

function removeFromCart(cartId) {
    if (confirm('Вы уверены, что хотите удалить этот товар из корзины?')) {
        fetch(`/DAO/user_cart_DAO.php?action=deleteUserCart&id=${cartId}`, {
            method: 'POST'
        })
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                alert('Товар удалён из корзины');
                document.getElementById(`cart-item-${cartId}`).remove();  
                calculateAndDisplayTotal();
            } else {
                alert('Ошибка при удалении товара из корзины: ' + data.message);
            }
        })
        .catch(error => console.error('Ошибка при удалении товара из корзины:', error));
    }
}

function checkout() {
    const cartItems = document.querySelectorAll('.cart-item');
    if (cartItems.length === 0) {
        alert('Ваша корзина пуста. Добавьте товары перед оформлением заказа.');
        return;
    }
    fetch(`/DAO/user_address_DAO.php?action=getUserAddressesByUserIdJson&userId=${globalUserId}`)
        .then(response => response.json())
        .then(addresses => {
            const modal = document.getElementById('checkoutModal');
            const addressSelect = document.getElementById('addressSelect');
            addressSelect.innerHTML = '';
            addresses.forEach(address => {
                const option = document.createElement('option');
                option.value = address.id;
                option.textContent = address.address;
                addressSelect.appendChild(option);
            });
            const deliveryTime = 21 + Math.floor(Math.random() * 43); 
            document.getElementById('deliveryTime').textContent = `Срок доставки: ${deliveryTime} дней`;
            modal.style.display = 'block';
        })
        .catch(error => {
            console.error('Ошибка при загрузке адресов:', error);
            alert('Не удалось загрузить адреса.');
        });
}

function calculateTotal() {
    const cartItems = document.querySelectorAll('.cart-item');
    let totalAmount = 0;
    cartItems.forEach(item => {
        const quantity = parseInt(document.getElementById(`quantity_${item.id.substring(10)}`).textContent);
        const priceText = document.getElementById(`price_${item.id.substring(10)}`).textContent;
        const price = parseFloat(priceText.replace('Цена: ', '').replace(' ₽', '').trim());
        totalAmount += quantity * price;
    });
    updateTotalAmountDisplay(totalAmount);
    return totalAmount; 
}

document.addEventListener('DOMContentLoaded', function() {
    if (document.getElementById('confirmOrderButton')) {
        document.getElementById('confirmOrderButton').addEventListener('click', () => {
            let selectedAddress;
            let saveAddress = false;
            if (document.getElementById('selectAddress').checked) {
                selectedAddress = document.getElementById('addressSelect').value;
            } else {
                selectedAddress = document.getElementById('addressTextInput').value;
                saveAddress = confirmAndSaveAddress(selectedAddress); 
                if (!saveAddress) return; 
            }
            const deliveryTime = document.getElementById('deliveryTime').textContent;
            const totalPrice = document.getElementById('totalAmount').textContent.replace('Общая сумма: ', '').replace(' ₽', '');
            const orderDate = new Date().toISOString().slice(0, 10);
            const cartItems = collectCartItems();
            const paymentMethod = document.querySelector('input[name="paymentMethod"]:checked').value;

            fetch('/DAO/order_DAO.php', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: `action=addOrderFromCart&user_id=${globalUserId}&order_date=${orderDate}&total_price=${totalPrice}&delivery_address=${selectedAddress}&delivery_time=${deliveryTime}&payment_method=${paymentMethod}`
            })            
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    fetch('/DAO/order_details_DAO.php', {
                        method: 'POST',
                        headers: {
                            'Content-Type': 'application/x-www-form-urlencoded',
                        },
                        body: `action=addOrderDetailsFromCart&order_id=${data.newId}&cart_items=${JSON.stringify(cartItems)}`
                    })
                    .then(response => response.json())
                    .then(detailsData => {
                        if (detailsData.success) {
                            alert('Заказ успешно оформлен!');
                            clearCart();
                        } else {
                            alert('Ошибка при оформлении деталей заказа: ' + detailsData.message);
                        }
                    });

                } else {
                    alert('Ошибка при оформлении заказа: ' + data.message);
                }
            })
            .catch(error => {
                console.error('Ошибка при оформлении заказа:', error);
            });
        });        
    }
});

function confirmAndSaveAddress(address) {
    if (!address.trim()) {
        alert('Адрес не может быть пустым. Пожалуйста, введите адрес.');
        return false;
    }
    if (confirm('Хотите ли вы сохранить этот новый адрес для будущих заказов?')) {
        fetch('/DAO/user_address_DAO.php', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
            },
            body: `action=addNewUserAddress&user_id=${globalUserId}&address=${encodeURIComponent(address)}`
        })
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                alert('Адрес успешно сохранен.');
            } else {
                alert('Не удалось сохранить адрес: ' + data.message);
            }
        })
        .catch(error => {
            console.error('Ошибка при сохранении адреса:', error);
            alert('Ошибка при сохранении адреса.');
        });
    }
    return true;
}

function collectCartItems() {
    const cartItems = [];
    const cartItemElements = document.querySelectorAll('.cart-item');

    cartItemElements.forEach(item => {
        const product_id = item.getAttribute('data-product-id');  
        const cart_item_id = item.id.substring(10);  
        const quantityElement = document.getElementById(`quantity_${cart_item_id}`);
        const priceElement = document.getElementById(`price_${cart_item_id}`);

        if (quantityElement && priceElement) {
            const quantity = parseInt(quantityElement.textContent);
            const priceText = priceElement.textContent.replace('Цена: ', '').replace(' ₽', '').trim();
            const price = parseFloat(priceText);

            cartItems.push({
                product_id: product_id,
                quantity: quantity,
                price: price
            });
        }
    });

    return cartItems;
}

function clearCart() {
    fetch(`/DAO/user_cart_DAO.php?action=clearCartByUserId&userId=${globalUserId}`, {
        method: 'GET' 
    })
    .then(response => response.json())
    .then(data => {
        if (data.success) {
            window.location.reload();
        } else {
            console.error('Ошибка при очистке корзины:', data.message);
        }
    })
    .catch(error => {
        console.error('Ошибка при очистке корзины:', error);
    });
}

function closeCheckoutModal() {
    const modal = document.getElementById('checkoutModal');
    modal.style.display = 'none';
}

function toggleAddressInput(isNewAddress) {
    const addressSelectDiv = document.getElementById('addressSelection');
    const addressInputDiv = document.getElementById('addressInput');
    if (isNewAddress) {
        addressSelectDiv.style.display = 'none';
        addressInputDiv.style.display = 'block';
    } else {
        addressSelectDiv.style.display = 'block';
        addressInputDiv.style.display = 'none';
    }
}